The present invention is directed to the area of memory management in computer systems with segmented memory space, such as embedded devices, and specifically provides a system for safely reclaiming memory and realigning the remaining applications contiguously in non-volatile, erasable xe2x80x9cflashxe2x80x9d-type memory.
This application is particularly useful in embedded systems with memory constraints, but is applicable in any environment in which applications may be removed from a machine and it is desirable to compact the remaining applications stored in memory, in order to provide the maximum amount of contiguous free space for new applications.
In embedded systems, total system memory may be in the order of 1 to 4 megabytes. Ideally, half of the system memory should be devoted to read-only memory (ROM), for storing applications and data which persist between sessions. Applications can be loaded, in sequential order, until the memory limits of the system are reached.
For the purposes of this invention, reference will be made to xe2x80x9cflashxe2x80x9d type memory. Technically, flash is a form of ROM in that it is non-volatile, but it is also erasable, generally in 64K byte blocks, according to current technology.
Particularly in the rapidly developing area of wireless communications, it may be necessary or desirable to delete existing applications in a device before a new application can be downloaded, either to free adequate memory to accommodate the new application(s) or to avoid incompatibility with newer versions of an application.
The present invention is directed to a system for safely removing applications from ROM, and then compacting the ROM to remove any xe2x80x9cholesxe2x80x9d left by application removal. This ensures that the maximum amount of contiguous free memory is made available for new application download.
In one embodiment, the present invention is directed to an improvement in a device""s non-volatile memory. This flash memory is characterized by having multiple memory segments adapted to receive and store application code and data. The improvement consists of having at least one memory segment reserved for use during memory compaction, which is adapted to receive code and/or data copied from another memory segment of the read-only memory. A mechanism for correcting pointers within the code to reference the new memory location of the code and/or data copied from another memory segment of the read-only memory is also provided.
According to another aspect, the present invention provides a method for removing a defined body of code from a read-only memory with multiple memory segments and at least one memory segment reserved for use during compaction. In the method, if it is determined that the defined body of code overlaps into a memory segment shared with other code, the other code is copied into a memory segment reserved for use during compaction, the memory segment reserved for compaction is swapped with the memory segment shared with other code, and the memory segment containing a portion of the defined body of code is erased.